﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient;

namespace CapaNegocio
{
    public class clsInventario{
        //TABLA: Inventario
        public int      codigoI                 { get; set; }
        public int      codpatrimonial          { get; set; }
        public string   denominacion            { get; set; }
        public string   dimension               { get; set; }
        public string   color                   { get; set; }
        public string   marca                   { get; set; }
        public string   modelo                  { get; set; }
        public string   serie                   { get; set; }
        public string   unidad                  { get; set; }
        public int      cantidad                { get; set; }
        public int      estado                  { get; set; }
        public string   observacion             { get; set; }
        public DateTime feccreacion             { get; set; }
        public int      tipinventario           { get; set; }

        //TABLA: Inventario Tipo
        public int      codigoIT                { get; set; }
        public string   nombre                  { get; set; }
        public string   descripcion             { get; set; }
        public int      totaltipoInventario    { get; set; } //Variable creada en la CLS, no existe en BD

        //TABLA: Auditoria
        public int      codigoAuditoria         { get; set; }
        public string   usuarioAuditoria        { get; set; }
        public DateTime fechaAuditoria          { get; set; }
        public string   ipAuditoria             { get; set; }
        public string   pcAuditoria             { get; set; }
        public string   usuariopcAuditoria      { get; set; }
        public string   procalmacenadoAuditoria { get; set; }
        public string   accionAuditoria         { get; set; }
        public string   tablaAuditoria          { get; set; }
        public string   campoAuditoria          { get; set; }
        public string   valantiguoAuditoria     { get; set; }
        public string   valnuevoAuditoria       { get; set; }

        //Variable para mtdUltimoRegistroTipoInventario()
        public Int32    ultimoNumero            { get; set; }

        //Metodo ListarTodoInventario()
        public DataTable mtdListarTodoInventario(){
            clsConexion         con = new clsConexion();
            MySqlCommand        command;
            DataTable           objDataTable    = new DataTable();
            DataSet             objDataSet      = new DataSet();
            MySqlDataAdapter    objDataAdapter  = new MySqlDataAdapter();
            
            try{
                con.mtdConectar();
                command = con.conexion.CreateCommand();

                //Llamamos al Store Procedure
                command.CommandText = "CALL spListarTodoInventario();";
                //Ejecutamos el DataAdapter con el Store Procedure
                command.ExecuteNonQuery();
                //Llenamos el DataTable con los resultados del Store Procedure
                objDataAdapter.SelectCommand = command;
                objDataAdapter.Fill(objDataTable);

                con.mtdDesconectar();
                objDataAdapter = null;
                return objDataTable;
            } catch (Exception ex){
                //return false;
                throw ex;
            }
        }

        //Metodo ListarInventario()
        public DataTable mtdListarInventario()
        {
            clsConexion con = new clsConexion();
            MySqlCommand command;
            DataTable objDataTable = new DataTable();
            DataSet objDataSet = new DataSet();
            MySqlDataAdapter objDataAdapter = new MySqlDataAdapter();

            Int32 tipoInv;
            try
            {
                con.mtdConectar();
                command = con.conexion.CreateCommand();

                tipoInv = this.tipinventario;

                if (tipoInv > 0)
                {
                    //Llamamos al Store Procedure
                    command.CommandText = "CALL spListarInventario(" + tipoInv + ");";
                    //Ejecutamos el DataAdapter con el Store Procedure
                    command.ExecuteNonQuery();
                    //Llenamos el DataTable con los resultados del Store Procedure
                    objDataAdapter.SelectCommand = command;
                    objDataAdapter.Fill(objDataTable);
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Imposible listar inventarios, no existen categorias para listar.");
                }
                con.mtdDesconectar();
                objDataAdapter = null;
                return objDataTable;
            }
            catch (Exception ex)
            {
                //return false;
                throw ex;
            }
        }

        //Metodo AgregarInventario()
        public bool mtdAgregarInventario(){
            clsConexion con = new clsConexion();
            MySqlCommand command;
            MySqlDataReader Reader;

            Int32   codPat           ;
            String  den              = null;
            String  dim              = null;
            String  col              = null;
            String  mar              = null;
            String  mod              = null;
            String  ser              = null;
            String  uni              = null;
            Int32   can              ;
            Int32   est              ;
            String  obs              = null;
            Int32   tipoInv          ;

            String  usuariologueado  = null;
            String  ip               = null;
            String  pc               = null;
            String  usuariopc        = null;
            String  procalmacenado   = null;
            String  campos           = null;
            String  valantiguos      = null;
            String  valnuevos        = null;
            
            try {
                con.mtdConectar();
                command = con.conexion.CreateCommand();
                
                codPat          = this.codpatrimonial;
                den             = this.denominacion;
                dim             = this.dimension;
                col             = this.color;
                mar             = this.marca;
                mod             = this.modelo;
                ser             = this.serie;
                uni             = this.unidad;
                can             = this.cantidad;
                est             = this.estado;
                obs             = this.observacion; 
                tipoInv         = this.tipinventario;

                usuariologueado = this.usuarioAuditoria;
                ip              = this.ipAuditoria;
                pc              = this.pcAuditoria;
                usuariopc       = this.usuariopcAuditoria;
                procalmacenado  = "spAgregarInventario";
                campos          = this.campoAuditoria;
                valantiguos     = this.valantiguoAuditoria;
                valnuevos       = this.valnuevoAuditoria;

                if ((codPat != 0) && (tipinventario != 0) && (den != "") && (uni != "") && (can != 0)){
                    command.CommandText = "CALL spAgregarInventario('" 
                                            + codPat + "','" + den + "','" + dim + "','" 
                                            + col + "','" + mar + "','" + mod + "','"
                                            + ser + "','" + uni + "','" + can + "','"
                                            + est + "','" + obs + "','" + tipoInv + "','" 
                                            + usuariologueado + "','" + ip + "','" + pc + "','" 
                                            + usuariopc + "','" + procalmacenado + "','" + campos + "','" 
                                            + valantiguos + "','" + valnuevos + "');";
                    Reader = command.ExecuteReader();
                    return true;
                } else {
                    System.Windows.Forms.MessageBox.Show("Imposible agregar al inventario, los campos necesarios estan vacios.");
                    return false;
                }
                con.mtdDesconectar();
            } catch (Exception ex){
                return false;
                throw ex;
            }
        }

        //Metodo ModificarInventario()
        public bool mtdModificarInventario(){
            clsConexion     con = new clsConexion();
            MySqlCommand    command;
            MySqlDataReader Reader;

            Int32  codPat;
            String den              = null;
            String dim              = null;
            String col              = null;
            String mar              = null;
            String mod              = null;
            String ser              = null;
            String uni              = null;
            Int32  can              ;
            Int32  est              ;
            String obs              = null;
            Int32  tipoInv          ;

            String usuariologueado  = null;
            String ip               = null;
            String pc               = null;
            String usuariopc        = null;
            String procalmacenado   = null;
            String campos           = null;
            String valantiguos      = null;
            String valnuevos        = null;

            try{
                con.mtdConectar();
                command = con.conexion.CreateCommand();

                codPat          = this.codpatrimonial;
                den             = this.denominacion;
                dim             = this.dimension;
                col             = this.color;
                mar             = this.marca;
                mod             = this.modelo;
                ser             = this.serie;
                uni             = this.unidad;
                can             = this.cantidad;
                est             = this.estado;
                obs             = this.observacion;
                tipoInv         = this.tipinventario;

                usuariologueado = this.usuarioAuditoria;
                ip              = this.ipAuditoria;
                pc              = this.pcAuditoria;
                usuariopc       = this.usuariopcAuditoria;
                procalmacenado  = "spModificarInventario";
                campos          = this.campoAuditoria;
                valantiguos     = this.valantiguoAuditoria;
                valnuevos       = this.valnuevoAuditoria;

                if ((codPat != 0) && (tipinventario != 0) && (den != "") && (uni != "") && (can != 0)){
                    command.CommandText = "CALL spModificarInventario('"
                                            + codPat + "','" + den + "','" + dim + "','"
                                            + col + "','" + mar + "','" + mod + "','"
                                            + ser + "','" + uni + "','" + can + "','"
                                            + est + "','" + obs + "','" + tipoInv + "','"
                                            + usuariologueado + "','" + ip + "','" + pc + "','"
                                            + usuariopc + "','" + procalmacenado + "','" + campos + "','"
                                            + valantiguos + "','" + valnuevos + "');";
                    Reader = command.ExecuteReader();
                    return true;
                } else{
                    System.Windows.Forms.MessageBox.Show("Imposible modificar el inventario, los campos necesarios estan vacios.");
                    return false;
                }
                con.mtdDesconectar();
            } catch (Exception ex){
                return false;
                throw ex;
            }
        }

        //Metodo BuscarInventario()
        public bool mtdBuscarInventario(){
            clsConexion con = new clsConexion();
            MySqlCommand command;
            MySqlDataReader Reader;
            
            Int32   codPat          ;
            Int32   tipoInv         ;

            String  usuariologueado = null;
            String  ip              = null;
            String  pc              = null;
            String  usuariopc       = null;
            String  procalmacenado  = null;
            String  campos          = null;
            String  valantiguos     = null;
            String  valnuevos       = null;

            try{
                con.mtdConectar();
                command = con.conexion.CreateCommand();

                codPat  = this.codpatrimonial;
                tipoInv = this.tipinventario;
                
                usuariologueado = this.usuarioAuditoria;
                ip              = this.ipAuditoria;
                pc              = this.pcAuditoria;
                usuariopc       = this.usuariopcAuditoria;
                procalmacenado  = "spModificarInventario";
                campos          = this.campoAuditoria;
                valantiguos     = this.valantiguoAuditoria;
                valnuevos       = this.valnuevoAuditoria;

                 if (codPat > 0 && tipoInv >0){
                    command.CommandText = "CALL spBuscarInventario('"
                                            + codPat + "', '" + tipoInv + "', '" + usuariologueado + "', '" 
                                            + ip + "', '" + pc + "', '" + usuariopc + "', '" 
                                            + procalmacenado + "', '" + campos + "', '" + valantiguos + "', '" 
                                            + valnuevos + "');";
                    Reader = command.ExecuteReader();
                    if (Reader.Read())
                    {
                        this.codpatrimonial = Reader.GetInt32(1);
                        this.denominacion = Reader.GetString(2);
                        this.dimension = Reader.GetString(3);
                        this.color = Reader.GetString(4);
                        this.marca = Reader.GetString(5);
                        this.modelo = Reader.GetString(6);
                        this.serie = Reader.GetString(7);
                        this.unidad = Reader.GetString(8);
                        this.cantidad = Reader.GetInt32(9);
                        this.estado = Reader.GetInt32(10);
                        this.observacion = Reader.GetString(11);
                        this.tipinventario = Reader.GetInt32(13);
                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("El registro no existe.");
                        return false;
                    }
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Imposible buscar registro. El campo necesario esta vacio.");
                    return false;
                }
                con.mtdDesconectar();
                return true;
            }
            catch (Exception ex)
            {
                return false;
                throw ex;
            }
        }

        //Metodo TipoInventario()
        public DataSet mtdTipoInventario(){
            clsConexion         con             = new clsConexion();
            MySqlCommand        command;
            MySqlCommand        command2;
            MySqlDataAdapter    objDataAdapter  = new MySqlDataAdapter();
            DataSet             objDataSet      = new DataSet();

            try{
                con.mtdConectar();
                //Total de Tipos de Inventario
                command = con.conexion.CreateCommand();
                command.CommandText = "SELECT COUNT(*) FROM InventarioTipo;";
                this.totaltipoInventario = int.Parse(command.ExecuteScalar() + "");

                //Registro de los Tipos de Usuario
                command2 = con.conexion.CreateCommand();
                command2.CommandText = "CALL spTipoInventario();";
                command2.ExecuteNonQuery();

                objDataAdapter.SelectCommand = command2;
                objDataAdapter.Fill(objDataSet, "InventarioTipo");
                return objDataSet;
                //con.mtdDesconectar();
            } catch (Exception){
                throw new Exception("Imposible listar los tipos de Inventario");
            }
        }
       
        //mtdUltimoRegistroTipoInventario()
        public bool mtdUltimoRegistroTipoInventario(){
            clsConexion         con             = new clsConexion();
            MySqlCommand        command;
            MySqlDataAdapter    objDataAdapter  = new MySqlDataAdapter();
            DataSet             objDataSet      = new DataSet();

            int tipoInv;

            try{
                con.mtdConectar();
                command = con.conexion.CreateCommand();
                tipoInv = this.tipinventario;

                if (tipoInv > 0){
                    command.CommandText = "CALL spUltimoRegistroTipoInventario('" + tipoInv + "');";
                    this.ultimoNumero = int.Parse(command.ExecuteScalar() + "");
                }
                con.mtdDesconectar();
                return true;
            } catch (Exception ex){
                //return false;
                throw ex;
            }
        }
    }
}
